﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace planetExpressLib
{
    public class clientesCAD
    {
        //para obtener el id y la contraseña
        static string conStr = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;
        SqlConnection con = new SqlConnection(conStr);
        string cadena;
        private List<clienteEN> allClientes;
        


        public void update(clienteEN cambio) // update de cliente
        {
            SqlConnection c = new SqlConnection(cadena);

            try
            {
                c.Open();
                string sentencia = "UPDATE CLIENTE SET "; 
                sentencia += "Pais = '" + cambio.Pais + "',";
                sentencia += "Provincia = '" + cambio.Provincia + "',";
                sentencia += "Ciudad = '" + cambio.Ciudad + "',";
                sentencia += "Direccion = '" + cambio.Direccion + "',";
                sentencia += "Telefono = '" + cambio.Telefono + "',";
                sentencia += "Email = '" + cambio.Mail + "'";
                sentencia += "WHERE Usuario = '" + cambio.Usuario+"'";
               

                SqlCommand com = new SqlCommand(sentencia, c);

                com.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                c.Close();
            }
        }


        //


        public clientesCAD()
        {
            allClientes = new List<clienteEN>();
            cadena = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ToString();
        }

        public void insert(clienteEN cliente)
        { 
            SqlConnection c = new SqlConnection(cadena);

            try
            {
                c.Open();
                string sentencia = "INSERT INTO CLIENTE(Id, Usuario, Password, Nombre, Apellidos, FechaNacimiento, Pais, Provincia, Ciudad, Direccion, Telefono, Email, VIP)VALUES('";
                sentencia += cliente.Id_usuario + "','";
                sentencia += cliente.Usuario + "','";
                sentencia += cliente.Pass + "','";
                sentencia += cliente.Nombre + "','";
                sentencia += cliente.Apellidos + "','";
                sentencia += cliente.FechaNac + "','";
                sentencia += cliente.Pais + "','";
                sentencia += cliente.Provincia + "','";
                sentencia += cliente.Ciudad + "','";
                sentencia += cliente.Direccion + "','";
                sentencia += cliente.Telefono + "','";
                sentencia += cliente.Mail + "','";
                sentencia += cliente.Vip + "')";

                SqlCommand com = new SqlCommand(sentencia, c);

                com.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                c.Close();
            }

            
        }
       
        
        public void delete(int id_usuario)
        {
        }
        
        public clienteEN readID(int id_usuario)
        {
            return null; 
        }

        public clienteEN readUsuario(string user)
        {
            clienteEN clie = new clienteEN();

            DataTable bdVirtual = new DataTable();
            string comando = "SELECT * FROM CLIENTE WHERE (Usuario = '" + user + "')";
            SqlCommand cmd = new SqlCommand(comando, con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            da.Fill(bdVirtual);

            try
            {
                if (bdVirtual.Rows.Count != 0)
                { //si no encuentra la contraseña es que el usuario no existe

                    //si existe el usuario completo del cliente la contraseña y su nombre de usuario
                    clie.Usuario = user;
                    clie.Pass = bdVirtual.Rows[0][2].ToString();
                    clie.Nombre = bdVirtual.Rows[0][3].ToString();
                    clie.Apellidos = bdVirtual.Rows[0][4].ToString();
                    clie.FechaNac = bdVirtual.Rows[0][5].ToString();
                    clie.Pais = bdVirtual.Rows[0][6].ToString();
                    clie.Provincia = bdVirtual.Rows[0][7].ToString();
                    clie.Ciudad = bdVirtual.Rows[0][8].ToString();
                    clie.Direccion = bdVirtual.Rows[0][9].ToString();
                    clie.Telefono = bdVirtual.Rows[0][10].ToString();
                    clie.Mail = bdVirtual.Rows[0][11].ToString();
                    clie.Punts = Convert.ToInt32(bdVirtual.Rows[0][12].ToString());
                    clie.Vip = Convert.ToBoolean(bdVirtual.Rows[0][13].ToString());
                }
            }
            catch (Exception)
            {
                clie = null;
            }

            return clie;

        }

        public List<clienteEN> readAll()
        {
            SqlConnection c = new SqlConnection(cadena);
            SqlDataReader dr = null;
            clienteEN nuevo = null;

            allClientes = new List<clienteEN>();

            try
            {
                c.Open();

                string sentencia = "SELECT * FROM CLIENTE";

                SqlCommand com = new SqlCommand(sentencia, c);

                dr = com.ExecuteReader();

                while (dr.Read())
                {
                    nuevo = new clienteEN();

                    nuevo.Id_usuario = Int32.Parse(dr["Id"].ToString());
                    nuevo.Usuario = dr["Usuario"].ToString();
                    nuevo.Pass = dr["Password"].ToString();
                    nuevo.Nombre = dr["Nombre"].ToString();
                    nuevo.Apellidos = dr["Apellidos"].ToString();
                    nuevo.FechaNac = dr["FechaNacimiento"].ToString();
                    nuevo.Pais = dr["Pais"].ToString();
                    nuevo.Provincia = dr["Provincia"].ToString();
                    nuevo.Ciudad = dr["Ciudad"].ToString();
                    nuevo.Direccion = dr["Direccion"].ToString();
                    nuevo.Telefono = dr["Telefono"].ToString();
                    nuevo.Mail = dr["Email"].ToString();
                    nuevo.Punts = Int32.Parse(dr["Puntos"].ToString());
                    nuevo.Vip = bool.Parse(dr["VIP"].ToString());
                    
                    allClientes.Add(nuevo);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dr.Close();
                c.Close();
            }

            return allClientes;
        }
        
        public clienteEN readLogin(string usuario, string password)
        {

            clienteEN cliente = null;

            SqlConnection c = new SqlConnection(conStr);
            SqlDataReader dr = null;

            try
            {
                c.Open();

                string sentencia = "SELECT * FROM CLIENTE WHERE Usuario = '" + usuario + "' AND Password = '" + password + "'";

                SqlCommand com = new SqlCommand(sentencia, c);

                dr = com.ExecuteReader();

                if (dr.Read())
                {
                    cliente.Id_usuario = (int)dr["Id"];
                    cliente.Nombre = dr["Nombre"].ToString();
                    cliente.Apellidos = dr["Apellidos"].ToString();
                    cliente.FechaNac = dr["Fechanacimiento"].ToString();
                    cliente.Pais = dr["Pais"].ToString();
                    cliente.Provincia = dr["Provincia"].ToString();
                    cliente.Ciudad = dr["Ciudad"].ToString();
                    cliente.Direccion = dr["Direccion"].ToString();
                    cliente.Telefono = dr["Telefono"].ToString();
                    cliente.Mail = dr["Email"].ToString();
                    cliente.Punts = (int)dr["Puntos"];
                    if ((int)dr["VIP"] == 1)
                    {
                        cliente.Vip = true;
                    }
                    else
                    {
                        cliente.Vip = false;
                    }

                }

            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dr.Close();
                c.Close();
            }

            return cliente;
        }

   
    }
}